/* 
vuex的store对象
*/
import Vue from 'vue'
import Vuex from 'vuex'

// 安装vuex
Vue.use(Vuex)

/* 
包含n个状态数据的对象
*/
const state = {
  count: 1
}
/* 
包含n个用于直接更新状态数据的方法的对象
*/
const mutations = {
  // 增加
  increment (state, num) {
    state.count += num
  },
  //减少
  decrement (state, num) {
    state.count -= num
  }
}

/* 
包含n个用于间接更新状态数据的方法的对象
  action方法可以包含逻辑处理/异步操作
*/
const actions = {
  // 奇数增加
  incrementIfOdd (context, num) {
    if (context.state.count%2===1) {
      // 调用commit触发名为increment的mutation调用
      context.commit('increment', num)
    }
  },
  // 延迟1s增加
  incrementAsync ({commit}, num) {
    setTimeout(() => {
      commit('increment', num)
    }, 1000);
  }
}
/* 
包含n个基于state数据的get计算属性方法的对象
*/
const getters = {
  evenOrOdd (state) {
    return state.count%2===1 ? '奇数' : '偶数'
  }
}

// 创建store对象
const store = new Vuex.Store({
  state,
  getters,
  mutations,
  actions,
})
// 暴露store
export default store
